var express = require('express');
var router = express.Router();
// 连接数据库工具
var open = require('../../../utils/mongodb').open
// 加密解密工具
var bcrypt = require('bcryptjs')
// token工具
var jwt = require('../../../utils/jwt')

router.post('/', function (req, res, next) {
  console.log("login");

  // 获取用户名和密码
  let {
    username,
    password
  } = req.body;

  // 设置必传参数
  if (!username || !password) {
    res.send({
      err: 1,
      msg: '用户名密码必传'
    })
    return;
  }

  // 查询数据库
  open({
    // 查询的库名
    collectionName: 'users'
  }).then(
    // 连接成功
    ({
      collection,
      client
    }) => {
      // 操作数据库
      //校验username是否存在
      collection.find({
        username
      }).toArray((err, result) => {
        if (err) {
          res.send({
            err: 1,
            msg: '集合操作失败'
          })
          client.close()
        } else {
          // 用户存在
          if (result.length > 0) {
            // 校验密码并解密
            // 这是异步的操作要用同步的方式去写
            // 数据库里的密码是经过加密的
            if (bcrypt.compareSync(password, result[0].password)) {
              // 校验密码成功
              // 生成token
              // 第二个参数是数据库的id，拿出来的是字符串，存的是objectId
              let token = jwt.sign({
                username,
                _id: result[0]._id
              });
              // 处理结果信息，删除用户名和密码
              delete result[0].usename;
              delete result[0].password;
              // 返回给前端
              res.send({
                err: 0,
                msg: '登陆成功',
                data: result[0],
                token
              });

              client.close();

            } else {
              res.send({
                err: 1,
                msg: '用户名或密码错误'
              })
              client.close();
            }

          } else {
            res.send({
              err: 1,
              msg: '用户名或密码不存在'
            });
            client.close();
          }

        }
      })
    }
  ).catch(
    // 连接失败
    err => res.send({
      err: 1,
      msg: '数据库连接失败'
    })
  )


});


module.exports = router;